﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using MySql.Data;
using MySql.Data.MySqlClient;


namespace CestodoBebe.Util
{
    /// <summary>
    /// Classe de acesso a dados
    /// </summary>
    public class AcessoDados : IDisposable
    {
        MySqlConnection conn;

        //private AcessoDados() { }
        
        /// <summary>
        /// Cria conexão com o banco
        /// </summary>
        /// <returns>Retorna uma connection aberta</returns>
        ///

        public AcessoDados()
        {
            conn = new MySqlConnection(Configuracao.ConnectionString);
        }


        public void Dispose()
        {
            conn.Close();
            conn.Dispose();
        }
        
        //protected MySqlConnection Conexao()
        //{
        //    MySqlConnection conn = new MySqlConnection(Configuracao.ConnectionString);

        //    try
        //    {
        //        // abre a conexão e a devolve ao chamador do método
        //        conn.Open();
        //    }
        //    catch (MySqlException sqle)
        //    {
        //        conn = null;
        //        throw new Exception("Ocorreu um erro de conexão : " + sqle);
        //    }

        //    return conn;
        //}

        public void fecharConexao()
        {
            if (conn!=null)
                conn.Close();
        }

        

        //public bool ExecutarComando(List<MySqlParameter> parametros, string sql)
        //{
        //    return true;
        //    //comando.Connection = Conexao();
        //    //return(comando.ExecuteNonQuery()) > 0;
        //}

        public MySqlDataReader ObterLeitor(string procedure)
        {
            MySqlCommand comando = new MySqlCommand();
            comando.CommandType = CommandType.StoredProcedure;
            comando.CommandText = procedure;
            comando.Connection = conn;
            fecharConexao();
            comando.Connection.Open();

            return comando.ExecuteReader();
        }

        public MySqlDataReader ObterLeitor(string procedure, List<MySqlParameter> parametros)
        {
            MySqlCommand comando = new MySqlCommand();
            comando.CommandType = CommandType.StoredProcedure;
            comando.CommandText = procedure;
            comando.Parameters.AddRange(parametros.ToArray());
            comando.Connection = conn;
            fecharConexao();
            comando.Connection.Open();

            return comando.ExecuteReader();
        }

        public bool ExecutarComando(string procedure, List<MySqlParameter> parametros)
        {

            try
            {
                MySqlCommand comando = new MySqlCommand();
                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = procedure;
                comando.Parameters.AddRange(parametros.ToArray());
                comando.Connection = conn;
                fecharConexao();
                comando.Connection.Open();
                return (comando.ExecuteNonQuery() > 0);
               
            }
           catch (MySqlException sqle)
            {
                return false;
                throw new Exception("Ocorreu um erro de conexão : " + sqle);
            }
            
        }

        public bool ExecuteEscalar(string procedure, List<MySqlParameter> parametros)
        {

            
            
            try
            {
                MySqlCommand comando = new MySqlCommand();
                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = procedure;
                comando.Parameters.AddRange(parametros.ToArray());
                comando.Connection = conn;
                comando.Connection.Open();
                
                return (Convert.ToInt32(comando.ExecuteScalar()) > 0);
                

            }
            catch (MySqlException sqle)
            {
                return false;
                throw new Exception("Ocorreu um erro de conexão : " + sqle);
            }

        }
    }
}
